package util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckUtil {
    private CheckUtil() {}

    /**
     * 校验手机号是否合法（11位，都是数字，以13、15、18开头，第三位0~9之间的任意数字，后边以任意八位数字结束）
     * @param tel 手机号
     * @return 合法为true
     */
    public static boolean checkTel(String tel) {
        String telRegex = "^((13[0-9])|(15[0-9])|(18[0-9]))\\d{8}$";
        Pattern p = Pattern.compile(telRegex);
        Matcher m = p.matcher(tel);
        return m.matches();
    }

    /**
     * 判断用户密码合法性
     * @param password 密码
     * @return 1代表账号小于8个字符，2代表账号大于16个字符,3代表有非法字符出现 4代表没有数字，5代表没有字母
     */
    public static int checkPassword(String password) {
        // 判断账号字符长度
        if (password.length() < 8) {
            return 1;
        } else if (password.length() > 16) {
            return 2;
        }

        int numCount = 0; // 数字出现字次数
        int letterCount = 0;// 字母出现次数
        int symbolCount = 0;// 符号出现次数

        // 判断各种类型字符出现过多少次
        for (int i = 0; i < password.length(); i++) {

            if (password.toUpperCase().charAt(i) >= 'A' && password.toUpperCase().charAt(i) <= 'Z') {
                // 如果循环到字母的话，则字母数量+1
                letterCount++;
            } else if (password.charAt(i) >= '0' && password.charAt(i) <= '9') {
                // 如果循环到数字的话，则数字数量+1
                numCount++;
            } else if (password.charAt(i) == '_' || password.charAt(i) == '@' || password.charAt(i) == '#'
                    || password.charAt(i) == '$' || password.charAt(i) == '!') {
                // 如果是有合法符号的的话，则字符数字+1
                symbolCount++;
            } else {
                // 如果有其他字符代表出现了非法字符，直接返回状态
                return 3;
            }

        }
        if (numCount == 0) {
            return 4;
        } else if (letterCount == 0) {
            return 5;
        }
        return 6;
    }


    /**
     * 校验邮箱（邮箱地址必须由大小写字母或数字或下划线开头，其后可以跟上任意的\w字符和中划线加号英文句号 @ 跟上任意的\w字符和中划线加号英文句号 . 跟上任意的\w字符和中划线加号英文句号）
     * @param email 邮箱
     * @return 合法为true
     */
    public static boolean checkEmail(String email) {
        String emailRegex = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
        Pattern p = Pattern.compile(emailRegex);
        Matcher m = p.matcher(email);
        return m.matches();
    }

    /**
     * 判断字符串是否包含特殊字符
     * @param name 名称
     * @return 包含则返回true
     */
    public static boolean checkName(String name) {
        String specialRegex = "[ _`~!@#$%^&*()+=|{}':;,\\[\\].<>/?！￥…（）—【】‘；：”“’。，、？]|\n|\r|\t";
        Pattern p = Pattern.compile(specialRegex);
        Matcher m = p.matcher(name);
        return m.matches();
    }
}
